const sharp = require('sharp');
const fs = require('fs/promises');
const path = require('path');

async function resizeImages(inputDir, outputDir, targetWidth = 320) {
  try {
    // 检查输入目录是否存在
    await fs.access(inputDir);
  } catch (error) {
    console.error(`输入目录不存在: ${inputDir}`);
    return;
  }

  // 确保输出目录存在
  try {
    await fs.access(outputDir);
  } catch (error) {
    await fs.mkdir(outputDir, { recursive: true });
  }

  const files = await fs.readdir(inputDir);
  
  await Promise.all(files.map(async (file) => {
    const ext = path.extname(file).toLowerCase();
    const inputPath = path.join(inputDir, file);
    const outputPath = path.join(outputDir, file);

    // 只处理图片文件
    if (['.jpg', '.jpeg', '.png', '.webp'].includes(ext)) {
      try {
        await sharp(inputPath)
          .resize(targetWidth, null, { // null 表示保持宽高比
            withoutEnlargement: true // 不放大比目标尺寸小的图片
          })
          .toFile(outputPath);
        console.log(`已处理: ${file}`);
      } catch (error) {
        console.error(`处理 ${file} 时出错:`, error);
      }
    }
  }));
}

// 使用示例
resizeImages('./images', './output', 100); 